#install.packages("readxl")
#install.packages("imager")
#devtools::install_bitbucket("graumannlabtools/multipanelfigure")
# install.packages("BiocManager")
# BiocManager::install("EBImage")
#install.packages('readbitmap')
library(ggplot2)
package 㤼㸱ggplot2㤼㸲 was built under R version 4.0.4
library(dplyr)
package 㤼㸱dplyr㤼㸲 was built under R version 4.0.3
Attaching package: 㤼㸱dplyr㤼㸲
The following objects are masked from 㤼㸱package:stats㤼㸲:
filter, lag
The following objects are masked from 㤼㸱package:base㤼㸲:
intersect, setdiff, setequal, union
library(gapminder)
package 㤼㸱gapminder㤼㸲 was built under R version 4.0.4
library(ggthemes)
package 㤼㸱ggthemes㤼㸲 was built under R version 4.0.4
library("readxl")
package 㤼㸱readxl㤼㸲 was built under R version 4.0.4
library(tidyverse)
package 㤼㸱tidyverse㤼㸲 was built under R version 4.0.4Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
-- Attaching packages ------------------------------------- tidyverse 1.3.0 --
v tibble 3.0.6 v purrr 0.3.4
v tidyr 1.1.2 v stringr 1.4.0
v readr 1.4.0 v forcats 0.5.1
package 㤼㸱tibble㤼㸲 was built under R version 4.0.3package 㤼㸱tidyr㤼㸲 was built under R version 4.0.3package 㤼㸱readr㤼㸲 was built under R version 4.0.3package 㤼㸱purrr㤼㸲 was built under R version 4.0.3package 㤼㸱stringr㤼㸲 was built under R version 4.0.3package 㤼㸱forcats㤼㸲 was built under R version 4.0.3-- Conflicts ---------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
library(imager)
package 㤼㸱imager㤼㸲 was built under R version 4.0.4Loading required package: magrittr
Attaching package: 㤼㸱magrittr㤼㸲
The following object is masked from 㤼㸱package:purrr㤼㸲:
set_names
The following object is masked from 㤼㸱package:tidyr㤼㸲:
extract
Attaching package: 㤼㸱imager㤼㸲
The following object is masked from 㤼㸱package:magrittr㤼㸲:
add
The following object is masked from 㤼㸱package:stringr㤼㸲:
boundary
The following object is masked from 㤼㸱package:tidyr㤼㸲:
fill
The following objects are masked from 㤼㸱package:stats㤼㸲:
convolve, spectrum
The following object is masked from 㤼㸱package:graphics㤼㸲:
frame
The following object is masked from 㤼㸱package:base㤼㸲:
save.image
library("EBImage")
package 㤼㸱EBImage㤼㸲 was built under R version 4.0.3
Attaching package: 㤼㸱EBImage㤼㸲
The following objects are masked from 㤼㸱package:imager㤼㸲:
channel, dilate, display, erode, resize, watershed
The following object is masked from 㤼㸱package:purrr㤼㸲:
transpose
library(plotly)
package 㤼㸱plotly㤼㸲 was built under R version 4.0.4
Attaching package: 㤼㸱plotly㤼㸲
The following object is masked from 㤼㸱package:EBImage㤼㸲:
toRGB
The following object is masked from 㤼㸱package:imager㤼㸲:
highlight
The following object is masked from 㤼㸱package:ggplot2㤼㸲:
last_plot
The following object is masked from 㤼㸱package:stats㤼㸲:
filter
The following object is masked from 㤼㸱package:graphics㤼㸲:
layout
Read the excel file
Caspase3 <- read_excel("C:/Users/mdp18pm/Google Drive/Lab book/2021/APRIL 2021/14_April-23_March_Caspase3_DPRs_CorticalNeurons/Plots with R/Results_Caspase3.xlsx")
Caspase3 Fluorescent Intensity
Now we plot a Grouped graph for Caspase3 fluorescent intensity levels
# Grouped
p <- Caspase3 %>%
ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) +
geom_bar(position="dodge", stat = "summary", fun.y = "mean") + #Use always stat=summary for mean
labs(x = "", y = "Caspase3_Int",
title = "Caspase3 levels") +
coord_cartesian(ylim = c(195, 230))
Ignoring unknown parameters: fun.y
#theme(axis.text.x = element_text(angle = 0, vjust = 1, hjust=1))
fig <- ggplotly(p)
No summary function supplied, defaulting to `mean_se()`
fig
Now we plot a Grouped graph for Caspase3 fluorescent intensity levels for just REPLICATE N=1
# Grouped
p2 <- Caspase3 %>%
filter(Replicate == "n1") %>% #we only want to look at n=1
ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) +
geom_bar(position="dodge", stat="identity") +
labs(x = "", y = "Caspase3_Int",
title = "Caspase3 levels_ REPLICATE N=1") +
coord_cartesian(ylim = c(195, 230))
#theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
fig2 <- ggplotly(p2)
fig2
Now we plot a Grouped graph for Caspase3 fluorescent intensity levels for just REPLICATE N=2
# Grouped
p3 <- Caspase3 %>%
filter(Replicate == "n2") %>% #we only want to look at n=1
ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) +
geom_bar(position="dodge", stat="identity") +
labs(x = "", y = "Caspase3_Int",
title = "Caspase3 levels_ REPLICATE N=2") +
coord_cartesian(ylim = c(195, 230))
#theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
fig3 <- ggplotly(p3)
fig3
NA
Now we plot the two replicates side-by-side to facilitate our visualization
# Grouped
p4 <- Caspase3 %>%
ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) +
geom_bar(position="dodge", stat = "summary", fun.y = "mean") + #Use always stat=summary for mean
labs(x = "", y = "Caspase3_Int",
title = "Caspase3 levels_ Two replicates") +
coord_cartesian(ylim = c(195, 230)) +
facet_wrap(~Replicate) +
theme(axis.text.x = element_text(angle = 60))
Ignoring unknown parameters: fun.y
fig4 <- ggplotly(p4)
No summary function supplied, defaulting to `mean_se()`
No summary function supplied, defaulting to `mean_se()`
fig4
Caspase3 signal_Occupied area
Now we plot a Grouped graph for Caspase3 signal_Occupied area
# Grouped
p5 <- Caspase3 %>%
ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) +
geom_bar(position="dodge", stat = "summary", fun.y = "mean") +
labs(x = "", y = "Caspase3_Area of signal",
title = "Caspase3 Area")
Ignoring unknown parameters: fun.y
#coord_cartesian(ylim = c(130, 140)) +
#theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
fig5 <- ggplotly(p5)
No summary function supplied, defaulting to `mean_se()`
fig5
Now we plot a Grouped graph for Caspase3 signal_Occupied area just for REPLICATE N=1
# Grouped
p6<- Caspase3 %>%
filter(Replicate == "n1") %>% #we only want to look at n=1
ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) +
geom_bar(position="dodge", stat="identity") +
labs(x = "", y = "Caspase3_Area of signal",
title = "Caspase3 Area_ REPLICATE N=1")
#coord_cartesian(ylim = c(195, 230))
#theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
fig6 <- ggplotly(p6)
fig6
NA
Now we plot a Grouped graph for Caspase3 signal_Occupied area just for REPLICATE N=2
# Grouped
p7<- Caspase3 %>%
filter(Replicate == "n2") %>% #we only want to look at n=1
ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) +
geom_bar(position="dodge", stat="identity") +
labs(x = "", y = "Caspase3_Area of signal",
title = "Caspase3 Area_ REPLICATE N=2")
#coord_cartesian(ylim = c(195, 230))
#theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
fig7 <- ggplotly(p7)
fig7
NA
# Grouped
p8 <- Caspase3 %>%
ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) +
geom_bar(position="dodge", stat = "summary", fun.y = "mean") +
labs(x = "", y = "Caspase3_Area of signal",
title = "Caspase3 Area_ Two Replicates") +
facet_wrap(~Replicate) +
#coord_cartesian(ylim = c(130, 140)) +
theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
Ignoring unknown parameters: fun.y
fig8 <- ggplotly(p8)
No summary function supplied, defaulting to `mean_se()`
No summary function supplied, defaulting to `mean_se()`
fig8
NA
LS0tDQp0aXRsZTogIkNhc3Bhc2UzIEludGVuc2l0eSAtIE1HMTMyIGFzc2F5Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3J9DQoNCiNpbnN0YWxsLnBhY2thZ2VzKCJyZWFkeGwiKQ0KI2luc3RhbGwucGFja2FnZXMoImltYWdlciIpDQojZGV2dG9vbHM6Omluc3RhbGxfYml0YnVja2V0KCJncmF1bWFubmxhYnRvb2xzL211bHRpcGFuZWxmaWd1cmUiKQ0KDQojIGluc3RhbGwucGFja2FnZXMoIkJpb2NNYW5hZ2VyIikNCiMgQmlvY01hbmFnZXI6Omluc3RhbGwoIkVCSW1hZ2UiKQ0KDQojaW5zdGFsbC5wYWNrYWdlcygncmVhZGJpdG1hcCcpDQpgYGANCg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdhcG1pbmRlcikNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KCJyZWFkeGwiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGltYWdlcikNCmxpYnJhcnkoIkVCSW1hZ2UiKQ0KbGlicmFyeShwbG90bHkpDQpgYGANCg0KIyMgUmVhZCB0aGUgZXhjZWwgZmlsZQ0KYGBge3J9DQpDYXNwYXNlMyA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9tZHAxOHBtL0dvb2dsZSBEcml2ZS9MYWIgYm9vay8yMDIxL0FQUklMIDIwMjEvMTRfQXByaWwtMjNfTWFyY2hfQ2FzcGFzZTNfRFBSc19Db3J0aWNhbE5ldXJvbnMvUGxvdHMgd2l0aCBSL1Jlc3VsdHNfQ2FzcGFzZTMueGxzeCIpDQpgYGANCg0KDQojIENhc3Bhc2UzIEZsdW9yZXNjZW50IEludGVuc2l0eQ0KDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgZmx1b3Jlc2NlbnQgaW50ZW5zaXR5IGxldmVscw0KYGBge3J9DQogDQojIEdyb3VwZWQNCnAgPC0gQ2FzcGFzZTMgJT4lIA0KICAgICAgZ2dwbG90KGFlcyhmaWxsPVRyZWF0bWVudCwgeT1GbHVvX0ludCwgeD1Db25kaXRpb24pKSArIA0KICAgICAgZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIiwgc3RhdCA9ICJzdW1tYXJ5IiwgZnVuLnkgPSAibWVhbiIpICsgICAjVXNlIGFsd2F5cyBzdGF0PXN1bW1hcnkgZm9yIG1lYW4NCiAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19JbnQiLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgbGV2ZWxzIikgKw0KICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxOTUsIDIzMCkpDQogICAgI3RoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnIDwtIGdncGxvdGx5KHApDQoNCmZpZw0KYGBgDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgZmx1b3Jlc2NlbnQgaW50ZW5zaXR5IGxldmVscyBmb3IganVzdCBSRVBMSUNBVEUgTj0xDQpgYGB7cn0NCiANCiMgR3JvdXBlZA0KcDIgPC0gQ2FzcGFzZTMgJT4lIA0KICAgICAgZmlsdGVyKFJlcGxpY2F0ZSA9PSAibjEiKSAlPiUgICAgICN3ZSBvbmx5IHdhbnQgdG8gbG9vayBhdCBuPTENCiAgICAgIGdncGxvdChhZXMoZmlsbD1UcmVhdG1lbnQsIHk9Rmx1b19JbnQsIHg9Q29uZGl0aW9uKSkgKyANCiAgICAgICAgZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIiwgc3RhdD0iaWRlbnRpdHkiKSArDQogICAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19JbnQiLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgbGV2ZWxzXyBSRVBMSUNBVEUgTj0xIikgKw0KICAgICAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDE5NSwgMjMwKSkgDQogICAgICAjdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnMiA8LSBnZ3Bsb3RseShwMikNCg0KZmlnMg0KYGBgDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgZmx1b3Jlc2NlbnQgaW50ZW5zaXR5IGxldmVscyBmb3IganVzdCBSRVBMSUNBVEUgTj0yDQpgYGB7cn0NCiANCiMgR3JvdXBlZA0KcDMgPC0gQ2FzcGFzZTMgJT4lIA0KICAgICAgICBmaWx0ZXIoUmVwbGljYXRlID09ICJuMiIpICU+JSAgICAgI3dlIG9ubHkgd2FudCB0byBsb29rIGF0IG49MQ0KICAgICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUZsdW9fSW50LCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgICAgZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIiwgc3RhdD0iaWRlbnRpdHkiKSArDQogICAgICAgIGxhYnMoeCA9ICIiLCB5ID0gIkNhc3Bhc2UzX0ludCIsIA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDYXNwYXNlMyBsZXZlbHNfIFJFUExJQ0FURSBOPTIiKSArDQogICAgICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxOTUsIDIzMCkpIA0KICAgICAgICAjdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnMyA8LSBnZ3Bsb3RseShwMykNCg0KZmlnMw0KDQpgYGANCg0KDQojIyBOb3cgd2UgcGxvdCB0aGUgdHdvIHJlcGxpY2F0ZXMgc2lkZS1ieS1zaWRlIHRvIGZhY2lsaXRhdGUgb3VyIHZpc3VhbGl6YXRpb24NCg0KYGBge3J9DQogDQojIEdyb3VwZWQNCnA0IDwtIENhc3Bhc2UzICU+JSANCiAgICAgIGdncGxvdChhZXMoZmlsbD1UcmVhdG1lbnQsIHk9Rmx1b19JbnQsIHg9Q29uZGl0aW9uKSkgKyANCiAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQgPSAic3VtbWFyeSIsIGZ1bi55ID0gIm1lYW4iKSArICAgI1VzZSBhbHdheXMgc3RhdD1zdW1tYXJ5IGZvciBtZWFuDQogICAgbGFicyh4ID0gIiIsIHkgPSAiQ2FzcGFzZTNfSW50IiwgDQogICAgICAgICAgICAgIHRpdGxlID0gIkNhc3Bhc2UzIGxldmVsc18gVHdvIHJlcGxpY2F0ZXMiKSArDQogICAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDE5NSwgMjMwKSkgKw0KICAgIGZhY2V0X3dyYXAoflJlcGxpY2F0ZSkgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjApKQ0KDQpmaWc0IDwtIGdncGxvdGx5KHA0KQ0KDQpmaWc0DQpgYGANCg0KDQoNCg0KIyBDYXNwYXNlMyBzaWduYWxfT2NjdXBpZWQgYXJlYQ0KDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgc2lnbmFsX09jY3VwaWVkIGFyZWENCmBgYHtyfQ0KIA0KIyBHcm91cGVkDQpwNSA8LSBDYXNwYXNlMyAlPiUgDQogICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUFyZWFfb2ZfU2lnbmFsLCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQgPSAic3VtbWFyeSIsIGZ1bi55ID0gIm1lYW4iKSArDQogICAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19BcmVhIG9mIHNpZ25hbCIsIA0KICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgQXJlYSIpICANCiAgICAgICNjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMTMwLCAxNDApKSArDQogICAgICAjdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnNSA8LSBnZ3Bsb3RseShwNSkNCg0KZmlnNQ0KYGBgDQoNCg0KIyMgTm93IHdlIHBsb3QgYSBHcm91cGVkIGdyYXBoIGZvciBDYXNwYXNlMyBzaWduYWxfT2NjdXBpZWQgYXJlYSBqdXN0IGZvciBSRVBMSUNBVEUgTj0xDQoNCmBgYHtyfQ0KIA0KIyBHcm91cGVkDQpwNjwtIENhc3Bhc2UzICU+JSANCiAgICAgIGZpbHRlcihSZXBsaWNhdGUgPT0gIm4xIikgJT4lICAgICAjd2Ugb25seSB3YW50IHRvIGxvb2sgYXQgbj0xDQogICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUFyZWFfb2ZfU2lnbmFsLCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQ9ImlkZW50aXR5IikgKw0KICAgICAgbGFicyh4ID0gIiIsIHkgPSAiQ2FzcGFzZTNfQXJlYSBvZiBzaWduYWwiLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgQXJlYV8gUkVQTElDQVRFIE49MSIpIA0KICAgICAgI2Nvb3JkX2NhcnRlc2lhbih5bGltID0gYygxOTUsIDIzMCkpIA0KICAgICAgI3RoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIHZqdXN0ID0gMSwgaGp1c3Q9MSkpDQoNCmZpZzYgPC0gZ2dwbG90bHkocDYpDQoNCmZpZzYNCg0KYGBgDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgc2lnbmFsX09jY3VwaWVkIGFyZWEganVzdCBmb3IgUkVQTElDQVRFIE49Mg0KDQpgYGB7cn0NCiANCiMgR3JvdXBlZA0KcDc8LSBDYXNwYXNlMyAlPiUgDQogICAgICBmaWx0ZXIoUmVwbGljYXRlID09ICJuMiIpICU+JSAgICAgI3dlIG9ubHkgd2FudCB0byBsb29rIGF0IG49MQ0KICAgICAgZ2dwbG90KGFlcyhmaWxsPVRyZWF0bWVudCwgeT1BcmVhX29mX1NpZ25hbCwgeD1Db25kaXRpb24pKSArIA0KICAgICAgICBnZW9tX2Jhcihwb3NpdGlvbj0iZG9kZ2UiLCBzdGF0PSJpZGVudGl0eSIpICsNCiAgICAgIGxhYnMoeCA9ICIiLCB5ID0gIkNhc3Bhc2UzX0FyZWEgb2Ygc2lnbmFsIiwgDQogICAgICAgICAgICAgIHRpdGxlID0gIkNhc3Bhc2UzIEFyZWFfIFJFUExJQ0FURSBOPTIiKSANCiAgICAgICNjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMTk1LCAyMzApKSANCiAgICAgICN0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCB2anVzdCA9IDEsIGhqdXN0PTEpKQ0KDQpmaWc3IDwtIGdncGxvdGx5KHA3KQ0KDQpmaWc3DQoNCmBgYA0KDQoNCmBgYHtyfQ0KIA0KIyBHcm91cGVkDQpwOCA8LSBDYXNwYXNlMyAlPiUgDQogICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUFyZWFfb2ZfU2lnbmFsLCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQgPSAic3VtbWFyeSIsIGZ1bi55ID0gIm1lYW4iKSArDQogICAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19BcmVhIG9mIHNpZ25hbCIsIA0KICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgQXJlYV8gVHdvIFJlcGxpY2F0ZXMiKSAgKw0KICAgICAgZmFjZXRfd3JhcCh+UmVwbGljYXRlKSArDQogICAgICAjY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDEzMCwgMTQwKSkgKw0KICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnOCA8LSBnZ3Bsb3RseShwOCkNCg0KZmlnOA0KDQpgYGANCg0KDQo=